package com.mco.utils.bloomfilter;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

/**
 * 布隆过滤器检查工具
 *
 * @author ：liao.wei
 * @date ：2023/9/23 16:24
 * @package : com.mco.utils.bloomfilter
 */
@Component
@Slf4j
@RequiredArgsConstructor
public class CheckUtil {
	private final RedisTemplate redisTemplate;
	
	
	public boolean checkWithBloomFilter(String checkItem, String key) {
		// 计算hash值，对计算结果取绝对值（因为存在负值）
		int hashVal = Math.abs(key.hashCode());
		//计算位数位置（通过hashVal和2的32次方取模后，余数）
		long index = (long) (hashVal % Math.pow(2, 32));
		log.info(key + "-对应的位置-" + index);
		//设置redis 中bitmap 对应位置的坑位，设置 1
		return redisTemplate.opsForValue().getBit(checkItem, index);
	}
}
